package dibujo;

import java.awt.Graphics;
import java.util.Vector;

import org.uc3m.ed.tad.lista.Pila;

import panel.PanelDibujoPila;



public class DibujoPila {

	private Vector<NodoDibujo> _elementos;
	
	private NodoEnvoltura _cabecera; 
	
	private PanelDibujoPila _panelDibujo;
	
	public DibujoPila()
	{
		_elementos=null;
		_cabecera=null;
	}
	
	public DibujoPila(PanelDibujoPila panelDibujoPila)
	{
		_elementos=null;
		_cabecera=null;
		_panelDibujo=panelDibujoPila;
	}

	public void dibujar(Graphics grafico, Pila<Integer>  estructura) {
	
		if (!estructura.estaVacia())
		{
			_elementos=new Vector<NodoDibujo>();
			
			while(!estructura.estaVacia())
				_elementos.add(new NodoDibujo(grafico,estructura.extraer().toString()));
			
			configurarNodos();
			for(int i= _elementos.size()-1;i>-1;i--)
			{
				estructura.anyadir(new Integer(_elementos.get(i).getDato()));
				_elementos.get(i).crearNodo();
			}
			
			_cabecera= new NodoEnvoltura(grafico,_elementos.firstElement());
		}
		else
			_cabecera= new NodoEnvoltura(grafico,null);
		
		
		configurarCabecera();
		_cabecera.crearCabeceraCola();
		
		
	}

	

	private void configurarNodos() {
		
		NodoDibujo anterior=_elementos.lastElement(),siguiente=null;
		anterior.setPosicionX((_panelDibujo.getWidth()/2)-(anterior.getAnchoNodo()/2));
		anterior.setPosicionY(_panelDibujo.getHeight()-anterior.getAltoNodo()-30);
		
		for(int i= _elementos.size()-2;i>-1;i--)
		{
			siguiente=_elementos.get(i);
			siguiente.setPosicionX(anterior.getPosicionX());
			siguiente.setPosicionY(anterior.getPosicionY()-anterior.getAltoNodo());
			anterior=siguiente;
			
			if ((anterior.getPosicionY()-anterior.getAltoNodo()-100)<0)
				_panelDibujo.setSize(_panelDibujo.getWidth(), _panelDibujo.getHeight()+anterior.getAltoNodo());
		}
		
	}
	
	private void configurarCabecera() {
		_cabecera.setPosicionX((_panelDibujo.getWidth()/2)-(_cabecera.getAnchoNodo()/2));
		_cabecera.setPosicionY(_panelDibujo.getHeight()-30);
	}


	

}
